package indv.Cshen.cfengsecurityshirodemo.util;

import indv.Cshen.cfengsecurityshirodemo.domain.ShiroUser;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @author Cfeng
 * @date 2022/7/21
 * 在用户注册时，将用户的密码使用该工具类加密后再存储进入数据库中，salt使用用户名
 * 因为这里不支持给静态属性注入yaml中的属性，所以可以直接让Spring再容器中创建一个单例Bean来处理
 */
@Component //创建一个单例Bean默认
public class PwdEncryptUtil {

    @Value("${shiro.hash-algorithm-name}")
    private String algorithmName;

    @Value("${shiro.hash-iterations}")
    private int hashIterations;

    /**
     * 输入加密前的密码，得到之后的密码，salt用户名，MD5，散列2次
     */
    public String encrypt(ShiroUser user) {
        SimpleHash simpleHash = new SimpleHash(algorithmName, ByteSource.Util.bytes(user.getUserPwd()),ByteSource.Util.bytes(user.getUserName()),hashIterations);
        return simpleHash.toString();
    }
}
